]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
magnifier: Add method to enable/disable crosshairs
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 28 Jun 2021 12:19:15 +0000 (14:19 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Mon, 28 Jun 2021 18:53:36 +0000 (20:53 +0200)
These do some some signals connection and monitor layout tracking
that we forget to disconnect when the magnifier is disconnected.
This causes warnings if enabling the magnifier, disabling it,
switching to another tty, and back. (Presumably also happens for
monitor hotplugs).

This signal should just stay connected as long as it's needed,
so add a setEnabled() method on the CrossHairs actor that we
can hook on the magnifier.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1902>

js/ui/magnifier.js

index 22c11766b0741eda563d751f52d46e84147028e6..c8f695e2b69c5f12a5e6eac9665bbc7fcbae747e 100644 (file)
@@ -172,6 +172,9 @@ var Magnifier = class Magnifier {
             this.stopTrackingMouse();
         }
 
+        if (this._crossHairs)
+            this._crossHairs.setEnabled(activate);
+
         // Make sure system mouse pointer is shown when all zoom regions are
         // invisible.
         if (!activate)
@@ -1677,9 +1680,7 @@ class Crosshairs extends Clutter.Actor {
         this._clipSize = [0, 0];
         this._clones = [];
         this.reCenter();
-
-        Main.layoutManager.connect('monitors-changed',
-                                   this._monitorsChanged.bind(this));
+        this._monitorsChangedId = 0;
     }
 
     _monitorsChanged() {
@@ -1687,6 +1688,16 @@ class Crosshairs extends Clutter.Actor {
         this.reCenter();
     }
 
+    setEnabled(enabled) {
+        if (enabled && this._monitorsChangedId === 0) {
+            this._monitorsChangedId = Main.layoutManager.connect(
+                'monitors-changed', this._monitorsChanged.bind(this));
+        } else if (!enabled && this._monitorsChangedId !== 0) {
+            Main.layoutManager.disconnect(this._monitorsChangedId);
+            this._monitorsChangedId = 0;
+        }
+    }
+
     /**
     * addToZoomRegion
     * Either add the crosshairs actor to the given ZoomRegion, or, if it is